package com.bestcem.xm.ticket.controller.vo.ticket;

import com.bestcem.xm.ticket.constant.ColumnConstant;
import com.bestcem.xm.ticket.entity.mongo.TicketTemplateV2;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * @author XiaoYunSong <ys.xiao@idiaoyan.com>
 * @version v1.0
 * @date 2021/9/9 22:30
 */
@Data
public class TicketTemplateVO {
    @JsonProperty(value = "id")
    private String id;

    /**
     * orgId
     */
    @JsonProperty(value = "orgId")
    private String orgId;

    /**
     * ticketConfigId
     */
    @JsonProperty(value = "ticketConfigId")
    private String ticketConfigId;

    /**
     * category
     */
    @JsonProperty(value = "category")
    private Integer category;

    /**
     * customFieldLimit 2.3后弃用
     */
    @JsonProperty(value = "customFieldLimit")
    private Integer customFieldLimit;

    /**
     * defaultFields
     * <p>
     * 这个字段我不知道怎么写, python里面是 dict 类型, 但是库里数据的格式不一样, 所以我不知道到底是个什么样子
     * 沟通记录: @赵明: 这个是历史字段了，不用了，现在用下面的 customFields，这个的类型应该是和 customFields 是一样的
     */
    @JsonProperty(value = "defaultFields")
    private List<FieldInfoVO> defaultFields;

    /**
     * customFields
     * <p>
     * 这个字段我不知道怎么写, python里面是 dict 类型, 但是库里数据的格式不一样, 所以我不知道到底是个什么样子
     * 沟通记录: @赵明: 这个的类型应该是和 defaultFields 是一样的
     */
    @JsonProperty(value = "customFields")
    private List<FieldInfoVO> customFields;

    /**
     * 数据记录标记
     */
    @JsonProperty(value = "record_flag")
    private Integer recordFlag = 1;

    @JsonProperty(value = "created_dt")
    private Date createdDate;

    @JsonProperty(value = "created_id")
    private String createdId;

    @JsonProperty(value = "updated_dt")
    private Date updatedDate;

    @JsonProperty(value = "updated_id")
    private String updatedId;


    @Data
    public static class FieldInfoVO {
        /**
         * name
         */
        @JsonProperty(value = "name")
        private String name;
        /**
         * type
         * text--1单行文本； multiLine--2 多行文本；
         * select---3单选； cascadeSelect--4 级联选择
         */
        @JsonProperty(value = "type")
        private Integer type;
        /**
         * require
         * 默认false
         */
        @JsonProperty(value = "required")
        private Boolean required = Boolean.FALSE;

        /**
         * filed
         * 字段key
         */
        @JsonProperty(value = "field")
        private String field;

        /**
         * singleSelectValue
         */
        @JsonProperty(value = "options")
        private List<OptionVO> options;

        @JsonProperty(value = ColumnConstant.TicketTemplateV2.FieldInfo.SINGLE_SELECT)
        private TicketTemplateV2.SingleSelect singleSelect;

        /**
         * CascadeValue
         */
        @JsonProperty(value = "cascade")
        private List<CascadeVO> cascades;
    }

    @Data
    public static class OptionVO {
        private static final long serialVersionUID = 2808726620840986656L;
        /**
         * 层级列表
         */
        @JsonProperty(value = "field")
        private String field;
        /**
         * 级联等级
         */
        @JsonProperty(value = "value")
        private Integer value;
    }

    @Data
    public static class CascadeVO {
        private static final long serialVersionUID = 2808726620840986656L;
        /**
         * 层级列表
         */
        @JsonProperty(value = "options")
        private List<OptionVO> options;
        /**
         * 级联等级
         */
        @JsonProperty(value = "level")
        private Integer level;


        @Data
        public static class OptionVO {
            private static final long serialVersionUID = 2808726620840986656L;

            /**
             * id
             */
            @JsonProperty(value = "id")
            private String id;
            /**
             * pid
             * 父id，存在多级关联
             * 父id的pid为0
             */
            @JsonProperty(value = "pid")
            private String pid;
            /**
             * value
             */
            @JsonProperty(value = "value")
            private String value;
        }
    }
}
